<?php
function outFormat(int $width, ?array $a): void {
    // 处理空数组或无效输入
    if (empty($a) || !is_array($a)) {
        return;
    }

    foreach ($a as $item) {
        // 1. 删除字符串中所有空格
        $cleanStr = str_replace(' ', '', $item);

        // 2. 计算左侧字符串的显示宽度（中文2字符，英文/数字/符号1字符）
        $leftDisplayWidth = 0;
        $strLength = mb_strlen($cleanStr, 'UTF-8');
        for ($i = 0; $i < $strLength; $i++) {
            $char = mb_substr($cleanStr, $i, 1, 'UTF-8');
            // 中文Unicode范围：0x4E00-0x9FFF，判定为2字符宽度
            $leftDisplayWidth += (preg_match('/[\x{4E00}-\x{9FFF}]/u', $char)) ? 2 : 1;
        }

        // 3. 生成UTF-8编码的16进制串（大写、字节间用_分隔）
        $hexParts = [];
        // 直接获取UTF-8字节流
        $bytes = unpack('C*', $cleanStr);
        foreach ($bytes as $byte) {
            $hexParts[] = strtoupper(sprintf('%02X', $byte));
        }
        $hexStr = implode('_', $hexParts);
        $rightWidth = strlen($hexStr); // 16进制串宽度（每个字符占1位）

        // 4. 计算中间填充空格数（总宽度 - 左侧显示宽度 - 右侧宽度）
        $spaceCount = $width - $leftDisplayWidth - $rightWidth;
        $spaces = $spaceCount > 0 ? str_repeat(' ', $spaceCount) : '';

        // 5. 输出（左对齐字符串 + 填充空格 + 右对齐16进制串）
        echo $cleanStr . $spaces . $hexStr . PHP_EOL;
    }
}

// 测试代码
$a = ['张三丰','里  斯','阿 kit','papi 酱','Jackson'];
outFormat(35, $a);